package compilador.semantico;

import java.util.HashMap;
import java.util.Map;

/**
 * Tabela de símbolos do compilador semântico. Cada entrada pode ter diferentes
 * atributos dependendo da categoria do símbolo (variável, nome de procedimento,
 * etc).
 *
 * @author Carlos H V Pinto
 * @author Lucas S Bueno
 */
public class TabelaSimbolos {

    private Map<String, PropriedadesSimboloBasico> tabela;

    /**
     * Construtor. Inicializa a tabela de símbolos vazia.
     */
    public TabelaSimbolos() {
        tabela = new HashMap<String, PropriedadesSimboloBasico>();
    }

    /**
     * Insere uma nova entrada na tabela de símbolos conforme a chave e as
     * propriedades especificadas. O retorno diz se a inserção foi feita com
     * sucesso ou não (false indica que a chave já existia na tabela).
     */
    public boolean insereSimbolo(String chave, PropriedadesSimboloBasico props) {
        //verifica se não existe nenhuma chave igual neste escopo
        if (!tabela.containsKey(chave)) {
            tabela.put(chave, props);
            return true;
        }

        return false;
    }

    /**
     * Busca e retorna as propriedades de um símbolo conforme a chave
     * especificada, ou então retorna null se não encontrar nenhum símbolo
     * correspondente a ela.
     */
    public PropriedadesSimboloBasico buscaSimbolo(String chave) {
        return tabela.get(chave);
    }
}
